﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Reflection;
using System.Reflection.Emit;

namespace IPickImporterUI.UtilObjects
{
    class SimpleConverter
    {

                private SimpleConverter()     {}
 
                /// <summary>
                ///
                /// </summary>
                /// <param name="o"></param>
                /// <returns></returns>
                public static DataTable ConvertToDataTable(Object o)
                {      
                        PropertyInfo[] properties = o.GetType().GetProperties();
                        DataTable dt = CreateDataTable(properties);
                        FillData(properties, dt, o);
                        return dt;
                }
 
                /// <summary>
                ///
                /// </summary>
                /// <param name="o"></param>
                /// <returns></returns>
                public static DataTable ConvertToDataTable(Object[] array)
                {
                        PropertyInfo[] properties = array.GetType().GetElementType().GetProperties();
                        DataTable dt = CreateDataTable(properties);
 
                        if (array.Length != 0)
                        {
                                foreach(object o in array)
                                        FillData(properties, dt, o);
 
                        }
 
                        return dt;
                }
 
                /// <summary>
                ///
                /// </summary>
                /// <param name="properties"></param>
                /// <returns></returns>
                private static DataTable CreateDataTable(PropertyInfo[] properties)
                {
                        DataTable dt = new DataTable();
                        DataColumn dc = null;
 
                        foreach(PropertyInfo pi in properties)
                        {
                                dc = new DataColumn();
                                dc.ColumnName = pi.Name;
                                dc.DataType = pi.PropertyType;
                               
                                dt.Columns.Add(dc);                            
                        }
 
                        return dt;
                }
 
 
                /// <summary>
                ///
                /// </summary>
                /// <param name="properties"></param>
                /// <param name="dt"></param>
                /// <param name="o"></param>
                private static void FillData(PropertyInfo[] properties, DataTable dt, Object o)
                {
                        DataRow dr = dt.NewRow();
 
                        foreach(PropertyInfo pi in properties)
                                dr[pi.Name] = pi.GetValue(o, null);
 
                        dt.Rows.Add(dr);       
                }
 
 
        }
}

